package mediator;

import java.util.HashMap;
import java.util.Map;

/**
 *  具体的中介者类,如果闹钟发送消息1为开始打开窗帘、打开咖啡机、打开电视，如果电视发送消息1为打开电视、关闭窗帘。
 */
public class ConcreteMediator extends SmartHomeMediator {
    private final Map<String, Device> devices;

    public ConcreteMediator() {
        this.devices = new HashMap<>();
    }


    /**
     * 注册
     *
     * @param device 具体的同事
     */
    @Override
    void register(String deviceName, Device device) {
        devices.put(deviceName, device);
    }

    /**
     * 核心方法，接收消息，协调具体的同事来完成任务
     *
     * @param command    消息
     * @param sender     具体的同事
     */
    @Override
    void executeAction(int command, Device sender) {
        if (sender instanceof Alarm) {
            if (command == 1) {
                // 打开窗帘、电视、咖啡机
                // 关闭闹钟
                Alarm alarm = (Alarm) devices.get("闹钟");
                alarm.stop();
                Curtains curtains = (Curtains) devices.get("窗帘");
                curtains.open();
                TV tv = (TV) devices.get("电视");
                tv.open();
                CoffeeMachine coffeeMachine = (CoffeeMachine) devices.get("咖啡机");
                coffeeMachine.open();
            }
            // else-if
        } else if (sender instanceof TV) {
            //打开电视、关闭窗帘。
            TV tv = (TV) devices.get("电视");
            tv.open();
            Curtains curtains = (Curtains) devices.get("窗帘");
            curtains.close();
        }
    }
}
